home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
et
/
et3_0-a1.lha
/
et3
/
src
/
Fields.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-07-20
|
6KB
|
220 lines
#ifndef Field_First
#ifdef __GNUG__
//pragma once
#pragma interface
#endif
#define Field_First
#include "VObject.h"
class Clipper;
class RegularExp;
class TextView;
class EditField;
class Text;
enum EditFieldFlags {
eEditFieldHasOverlay = BIT(eVObjLast+1),
eEditFieldNoBorder = BIT(eVObjLast+2),
eEditFieldDefault = eVObjDefault,
eEditFieldLast = eVObjLast+2
};
//---- TextViewOverlay ---------------------------------------------------------
class TextViewOverlay {
Clipper *cl;
TextView *tv;
EditField *currentfield;
Text *ct;
bool noupdate;
public:
TextViewOverlay();
~TextViewOverlay();
bool Draw(EditField *ef, Rectangle r);
void Update(EditField *ef);
void SetOrigin(EditField *ef, Point at);
void SetExtent(EditField *ef, Point e);
Command *DispatchEvents(EditField *ef, Point lp, Token &t, Clipper *vf);
bool KbdFocus(EditField *ef, bool in, bool wordwrap);
bool CopyInStr(EditField *ef, char *buf, int sz);
bool Size(EditField *ef, int *sz);
bool Sync(EditField *ef);
void DoSetupMenu(EditField *ef, Menu*);
Command *DoMenuCommand(EditField *, int c);
};
//---- Field -------------------------------------------------------------------
class Field : public VObject {
public:
MetaDef(Field);
Field(int minwidth= 0, Font *f= gSysFont);
Field(int id, int minwidth= 0, Font *f= gSysFont);
void Init(int mw, Font *f);
Metric GetMinSize();
void SetEditable(bool e);
Font *GetFont()
{ return font; }
void SetFont(Font *fp);
void Draw(Rectangle);
virtual char *GetStringForDrawing();
int Compare(Object *op);
bool IsEqual(Object *op);
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
protected:
virtual int GetLines();
Font *font;
int minwidth;
};
//---- EditField ---------------------------------------------------------------
class EditField: public Field {
public:
MetaDef(EditField);
EditField(int id, int minwidth= 0, Font *f= gSysFont);
~EditField();
TextViewOverlay *GetTextViewOverlay();
void Draw(Rectangle);
bool KbdFocus(bool in);
virtual bool ValidateString(char *s);
Command *Input(Point lp, Token &t, Clipper *vf);
Command *DispatchEvents(Point lp, Token &t, Clipper *vf);
void SetOrigin(Point at);
void SetExtent(Point e);
void Control(int id, int part, void *val);
virtual char *GetStringForEditing();
void Update(bool redraw);
bool HasOverlay()
{ return TestFlag(eEditFieldHasOverlay); }
void Sync();
void DoSetupMenu(Menu*);
Command *DoMenuCommand(int c);
void Open(bool mode);
};
//---- TextField ---------------------------------------------------------------
class TextField: public EditField {
public:
MetaDef(TextField);
TextField(int id, int minWidthInChars, Font *f= gSysFont);
~TextField();
char *AsString();
void SetString(char*, bool redraw= FALSE);
void SetFString(bool redraw, char *fmt, ...);
bool ValidateString(char *s);
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
//obsolete; for compatibility with EditTextItem
TextField(int id, int minWidthInPixel, char *t);
int GetTextSize();
void GetString(char *buf, int sz);
char *GetString();
protected:
char *text;
};
//---- MultiLineField ----------------------------------------------------------
class MultiLineField : public TextField {
public:
MetaDef(MultiLineField);
MultiLineField(int id, int l, int minwidth= 0, char *t="");
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
protected:
int GetLines();
int lines;
};
//---- FormatField -------------------------------------------------------------
class FormatField: public EditField {
public:
MetaDef(FormatField);
FormatField(int id, char *fmt);
~FormatField();
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
protected:
char *format;
};
//---- IntField ----------------------------------------------------------------
class IntField: public FormatField {
public:
MetaDef(IntField);
IntField(int id, int minval= -cMaxInt, int maxval= cMaxInt, char *fmt= "%d");
IntField(int id, int val, int minval, int maxval, char *fmt= "%d");
void Init(int val, int minval, int maxval);
int GetValue();
bool SetValue(int, bool redraw= TRUE);
void SetRange(int min, int max);
void GetRange(int &min, int &max);
bool ValidateString(char *s);
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
char *AsString();
char *GetStringForDrawing();
protected:
int value, minVal, maxVal;
};
//---- FloatField --------------------------------------------------------------
class FloatField: public FormatField {
public:
MetaDef(FloatField);
FloatField(int id, double minval, double maxval, char *fmt= "%g");
FloatField(int id, double val, double minval, double maxval, char *fmt= "%g");
void Init(double val, double minval, double maxval);
double GetValue();
bool SetValue(double, bool redraw= TRUE);
void SetRange(double min, double max);
void GetRange(double &min, double &max);
bool ValidateString(char *s);
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
char *AsString();
char *GetStringForDrawing();
protected:
double value, minVal, maxVal;
};
//---- RegExpField ----------------------------------------------------------
class RegExpField : public TextField {
public:
MetaDef(RegExpField);
RegExpField(int id, RegularExp *rex, int mw= 0, char *msg= 0, char *t= "");
~RegExpField();
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
protected:
bool ValidateString(char *s);
private:
RegularExp *regex;
char *errmsg;
};
#endif